package com.webtest.filter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author lzy
 * @version v1.0
 * Create DateTime: 2018/8/20 21:03
 */
public class ContentFilter extends AbstractHttpFilter{
    @Override
    protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
        //1.获取请求的content参数的值
        String content = request.getParameter("content");
        //2.把其中fuck、shit等字符串替换为*****

            //ServletRequest, HttpRequest中并没有提供诸如setParameter(paramName, paramValue)类似这样的方法

            //目标：改变HttpServletRequest的getParameter(String)方法的行为，若该方法的返回值中包含"fuck" ，则替换为****
            //1.如果对于一个类的方法不满意，则需要进行重写，最常见的方式是：继承父类，重写方法
            // ① 若实现则需要继承org.apache.catalina.connector.RequestFacade,而这仅是Tomcat服务器的实现，若更换服务器，该方案将无法使用 x
            // ② 直接写一个HttpServletRequest接口的实现类：无法实现其中的方法 x
            // ③ 装饰目前的HttpServletRequest对象：装饰其getParameter方法，而其他的方法和其实现相同
            // 创建一个类，该类实现HttpServletRequest接口，把当前doFilter中的request传入到该类，使用该成员变量去实现接口的全部方法
        //3.转到目标页面
        MyHttpServletRequest myHttpServletRequest = new MyHttpServletRequest(request);

        chain.doFilter(myHttpServletRequest, response);
    }

    @Override
    protected void init() {

    }
}
